<?php
/**
 * @Name Module 
 * @Title 模块控制器
 * @Extends app\admin\controller\AdminCore
 * @Modifiers public
 * @Auth Ghj<912524639@qq.com>
 * @Time 2018年08月08日 
 * @Site http:// www.thinkgms.com/
 */
namespace app\admin\controller;
use app\admin\controller\AdminCore;

class Module extends AdminCore {
	
	
	//当前控制器的模型
	protected $Model;
	
	//当前控制器的数据表
	protected $Db;
	
	//当前控制器的验证器
	protected $Validate;
	
	//当前控制器的主键
	protected $Pk='id';
	
    //系统初始化
    protected function initialize(){
        // 继承父模型的初始化方
		parent::initialize ();
		$this->Validate		= validate ('app\admin\validate\Module');
		$this->Model		= model('app\admin\model\Module');
		$this->Db			= db('Module');
    }
	
	/**
	 * @Name index
	 * @Title 首页
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
	public function index() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取请求数据
			$Parm = input ( 'post.' );
			$List = $this->Model->_List ($Parm ['start'],$Parm ['limit']);
			// 封装返回数据
			$Res = [ 
				'total' => count($List),
				'rows' => $List 
			];
			// 返回json数据
			return json ( $Res );
		} else {
			// 返回视图
			return view ();
		}
	}
	
	/**
	 * 安装
	 */
	public function install() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取参数
			$Name = input ( 'name', '' );
			// 验证参数
			if ($Name == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数错误' );
			}
			$ExtendObj = new \sys\Extend();
			// 执行安装
			$Result = $ExtendObj->_Inst($Name ,1);
			// 判断执行结果
			if ($Result === true) {
				// 返回成功
				return _Code ( '200', '成功' );
			} else {
				// 返回错误信息 如果没有错误信息 默认返回
				$_Err = $ExtendObj->error;
				return _Code ( '301', $_Err ? $_Err : "操作失败");
			}
		}
	}
	/**
	 * 卸载
	 */
	public function uninstall() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取参数
			$Name = input ( 'name', '' );
			// 验证参数
			if ($Name == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数错误' );
			}
			$ExtendObj = new \sys\Extend();
			// 执行卸载
			$Result = $ExtendObj->_Unin($Name ,1);
			// 判断执行结果
			if ($Result === true) {
				// 返回成功
				return _Code ( '200', '成功' );
			} else {
				// 返回错误信息 如果没有错误信息 默认返回
				$_Err = $ExtendObj->error;
				return _Code ( '301', $_Err ? $_Err : "操作失败");
			}
		}
	}
	
	/**
	 * 状态切换
	 */
	public function sta() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取参数
			$ID = input ( 'id', '' );
			// 获取参数
			$Sta = input ( 'sta', 1 );
			// 验证参数
			if ($ID == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数错误' );
			}
			// 拆分字符串 因为前台可能会删除多条数据
			if($Sta == 0){
				$ModelInfo = $this->Model->where(['id' => $ID ])->find();
				if(!in_array($ModelInfo['rely_by'],[null,''])){
					return _Code ( '201', '此功能被 ['.$ModelInfo['rely_by'].'] 依赖 禁止禁用' );
				}
			}
			// 删除数据
			$Res = $this->Model->allowField ( true )->isUpdate ( true )->save ( ['status'=>$Sta], [ 
				'id' => $ID 
			] );
			if($Sta == 0){
				$Rtit = '禁用';
			}else{
				$Rtit = '启用';
			}
			// 判断执行结果
			if ($Res) {
				// 返回成功
				return _Code ( '200', $Rtit.'成功' );
			} else {
				// 返回失败
				return _Code ( '201', $Rtit.'失败' );
			}
		}
	}
	
	/**
	 * 配置设置
	 */
	public function setting() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取POST数据
			$Post = input ( 'post.' );
			// 获取数据主键 防止通过GET方式传递逐渐
			$ID = input ( 'setting_key_id', '' );
			// 验证参数
			if ($ID == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数错误' );
			}
			unset($Post['setting_key_id']);
			$Data['setting'] = serialize($Post);
			// 数据写入 验证字段为数据库内字段 写入类型为更新
			$Res = $this->Model->allowField ( true )->isUpdate ( true )->save ( $Data, [ 
					'id' => $ID 
			] );
			// 判断执行结果
			if ($Res) {
				// 返回成功
				return _Code ( '200', '成功' );
			} else {
				// 返回失败
				$Err = $this->Model->getError ();
				
			}
		} else {
			$ID	= input ( 'id', '' );
			if ($this->request->ext () == 'js') {
				// 读取模版文件
				$CPath = APP_PATH. $ID . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'setting.html';
				//如果配置不存在，则返回错误
				if (!file_exists($CPath)) {
					$this->assign ( 'content_tpl', "" );
				}
				$this->assign ( 'content_tpl', $this->fetch($CPath).",{xtype:'hiddenfield',name: 'setting_key_id'}" );
				return view();
			}else{
				// 验证参数
				if ($ID == '') {return _Code ( '101', '参数错误' );}
				// 读取数据
				$Data = $this->Model->where ( [ 'id' => $ID ] )->find ();
				// 判断数据是否正确
				if (! $Data) {
					// 返回错误信息
					return _Code ( '201', '数据不存在' );
				}
				$DBSetting = unserialize($Data['setting']);
				if(!is_array($DBSetting)){
					$DBSetting = [];
				}
				$FileSetting = [];
				//设置当前插件的配置路径
				$CPath = APP_PATH . $Data['name'] . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'config.php';
				//如果配置不存在，则返回错误
				if (file_exists($CPath)) {
					$Conf = require $CPath;
					if(isset($Conf['setting'])){
						$FileSetting = $Conf['setting'];
					}
				}
				$Setting = array_merge($FileSetting,$DBSetting);
				$Setting['setting_key_id'] = $ID;
				// 返回json数据
				return _Code ( '200', '成功', $Setting );
			}
		}
	}
}